// pages/FirstPage/FixOrWarn/FixOrWarn.js
const api = require("../../../config/api.js")
var amapFile = require('../../../libs/amap-wx.130.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    isRecording: false, // 控制录音弹框显示
    recorderManager: null, // 录音管理器
    ImgList: [], // 用于存储上传的图片
    feedbackData: {
      psCustomerCode: '',
      feedbackContent: '',
      feedbackVoiceFile: '',
      feedbackVideoFile: '',
      feedbackImgFile: '',
      feedbackProvince: '',
      feedbackCity: '',
      feedbackRegion: '',
      feedbackAddress: '',
      feedbackLongitude: '',
      feedbackLatitude: '',
      feedbackType: '',
    },
  },

  onBack: function () {
    wx.navigateBack({
      delta: 1
    });
  },
  // 删除图片
  onDeleteImage: function (e) {
    const index = e.currentTarget.dataset.index; // 获取要删除的图片索引
    const updatedImgList = [...this.data.ImgList];
    updatedImgList.splice(index, 1); // 删除指定索引的图片

    this.setData({
      ImgList: updatedImgList
    });

    wx.showToast({
      title: '图片已删除',
      icon: 'none'
    });
  },
  // 拼接图片
  updateFeedbackImgFile: function () {
    const { ImgList } = this.data; // 获取 ImgList 数组
    const feedbackImgFile = ImgList.join('&&'); // 使用&&拼接数组中的所有 URL
    this.setData({
      'feedbackData.feedbackImgFile': feedbackImgFile // 更新 feedbackImgFile 的值
    });
    console.log('拼接后的 feedbackImgFile:', feedbackImgFile);
  },
  
  onSubmit: function (e) {
    this.updateFeedbackImgFile()
    if(this.data.ImgList.length<1){
      wx.showToast({
        title: "请添加至少一张图片",
        icon: "none"
      })
      return ;
    }
    console.log(this.data)
    wx.request({
      url: api.feedbackSubmit,
      method: 'POST',
      data: Object.assign({}, this.data.feedbackData),
      success: (res) => {
        wx.hideLoading()
        console.log(res.data)
        if (res.data.code == 200) {
          wx.navigateBack({
            delta: 1
          });
        } else {
          wx.showToast({
            title: res.data.mesage,
            icon: "none"
          })
        }
      }
    })
  },
  onInputContent(e) {
    this.setData({
      'feedbackData.feedbackContent': e.detail.value
    });
  },
  initRecord: function () {
    const recorderManager = wx.getRecorderManager();

    recorderManager.onStart(() => {
      console.log('录音开始');
    });

    recorderManager.onPause(() => {
      console.log('录音暂停');
    });

    recorderManager.onResume(() => {
      console.log('录音继续');
    });

    recorderManager.onStop((res) => {
      console.log('录音结束，临时文件路径:', res.tempFilePath);
      this.setData({
        tempAudioPath: res.tempFilePath,
        isRecording: false // 关闭弹框
      });
      this.uploadFile({
        filePath: res.tempFilePath,
        successCallback: (data) => {
          this.setData({
            'feedbackData.feedbackVoiceFile': data
          })
          console.log('录音上传成功:', data);
        }
      });
    });

    this.setData({
      recorderManager
    });
  },
  // 选择录音方式
  onChooseAudio: function () {
    const that = this;
    wx.showActionSheet({
      itemList: ['现场录音上传'], // 弹窗选项
      success: function (res) {
        if (res.tapIndex === 0) {
          that.recordAndUpload(); // 现场录音
        } else if (res.tapIndex === 1) {
          that.onUploadVoice(); // 从文件中选择音频
        }
      },
      fail: function (err) {
        console.log('用户取消选择', err);
      }
    });
  },
  // 现场录音并上传
  recordAndUpload: function () {
    const that = this;
    // const recorderManager = wx.getRecorderManager();

    // recorderManager.onStart(() => {
    //   wx.showToast({
    //     title: '录音开始',
    //     icon: 'none'
    //   });
    // });
    this.recordStart();
    // recorderManager.onStop((res) => {
    //   const tempFilePath = res.tempFilePath; // 获取录音文件路径
    //   console.log('录音结束，临时文件路径:', tempFilePath);

    //   // 上传录音文件
    //   that.uploadFile({
    //     filePath: tempFilePath,
    //     successCallback: (data) => {
    //       console.log('录音上传成功:', data);
    //       this.setData({
    //         'feedbackData.feedbackVoiceFile':data
    //       })
    //     }
    //   });
    // });

    // // 开始录音
    // recorderManager.start({
    //   duration: 6000, // 最长录音时间，单位 ms
    //   sampleRate: 16000,
    //   numberOfChannels: 1,
    //   encodeBitRate: 96000,
    //   format: 'mp3' // 或 'aac'
    // });
  },
  onUploadVoice: function () {
    this.uploadFile({
      fileType: 'file', // 文件类型
      successCallback: (fileUrl) => {
        console.log('上传录音地址:', fileUrl);
        this.setData({
          'feedbackData.feedbackVoiceFile': fileUrl
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  onUploadVideo: function () {
    this.uploadFile({
      fileType: 'file', // 文件类型
      successCallback: (fileUrl) => {
        console.log('上传视频地址:', fileUrl);
        this.setData({
          'feedbackData.feedbackVideoFile': fileUrl
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  onUploadImage1: function () {
    const maxCount = 9 - this.data.ImgList.length; // 剩余可上传的图片数量
    if (maxCount <= 0) {
      wx.showToast({
        title: '最多上传9张图片',
        icon: 'none'
      });
      return;
    }
    // 调用文件上传接口
    this.uploadFile({
      fileType: 'image', // 文件类型
      count: maxCount, // 本次允许选择的图片数量
      successCallback: (fileUrl) => {
        console.log('上传图片地址:', fileUrl);

        // 将新上传的图片 URL 添加到 ImgList 中
        this.setData({
          ImgList: [fileUrl, ...this.data.ImgList]
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  // 上传图片
  onUploadImage: function () {
    this.uploadFile({
      fileType: 'image', // 文件类型
      successCallback: (fileUrl) => {
        console.log('上传图片地址:', fileUrl);
        this.setData({
          'feedbackData.feedbackImgFile': fileUrl
        });
      },
      failCallback: (error) => {
        console.error('上传失败:', error);
      }
    });
  },
  // 通用文件上传函数
  uploadFile: function (options) {
    const {
      filePath,
      fileType, // 文件类型
      sourceType = ['album', 'camera'], // 选择文件来源
      count, // 可选择的文件数量
      name = 'file', // 后端接收文件的字段名
      successCallback, // 上传成功后的回调
      failCallback // 上传失败后的回调
    } = options;
    if (filePath) {
      console.log('已有文件')
      wx.uploadFile({
        url: api.uploadFile,
        filePath: filePath, // 本地文件路径
        name: name, // 后端接收文件的字段名
        success: (uploadResult) => {
          const data = JSON.parse(uploadResult.data);
          console.log('上传文件结果:', data);
          if (data.code === 200) {
            wx.showToast({
              title: '上传成功',
              icon: 'success'
            });
            if (typeof successCallback === 'function') {
              successCallback(data.data); // 执行成功回调，传入文件地址
            }
          } else {
            wx.showToast({
              title: data.message || '上传失败',
              icon: 'none'
            });
            if (typeof failCallback === 'function') {
              failCallback(data);
            }
          }
        },
        fail: (error) => {
          console.error('上传失败:', error);
          wx.showToast({
            title: '上传失败，请重试',
            icon: 'none'
          });
          if (typeof failCallback === 'function') {
            failCallback(error);
          }
        }
      });
    } else {
      console.log('选择文件')
      // 选择文件
      wx.chooseMedia({
        count: count, // 可以选择的数量
        mediaType: ['image', 'video'], // 媒体类型，可以是图片或视频
        sourceType: ['album', 'camera'], // 来源，相册或相机
        success: (chooseResult) => {
          const tempFiles = chooseResult.tempFiles; // 获取选择的所有文件
          console.log('选择的文件路径:', tempFiles);
          
          // 遍历所有选择的文件并逐个上传
          tempFiles.forEach((file, index) => {
            wx.uploadFile({
              url: api.uploadFile, // 上传接口
              filePath: file.tempFilePath, // 本地文件路径
              name: name, // 后端接收文件的字段名
              success: (uploadResult) => {
                const data = JSON.parse(uploadResult.data);
                console.log('上传文件结果:', data);
                if (data.code === 200) {
                  wx.showToast({
                    title: '上传成功',
                    icon: 'success'
                  });
                  if (typeof successCallback === 'function') {
                    successCallback(data.data); // 执行成功回调，传入文件地址
                  }
                } else {
                  wx.showToast({
                    title: data.message || '上传失败',
                    icon: 'none'
                  });
                  if (typeof failCallback === 'function') {
                    failCallback(data);
                  }
                }
              },
              fail: (error) => {
                console.error('上传失败:', error);
                wx.showToast({
                  title: '上传失败，请重试',
                  icon: 'none'
                });
                if (typeof failCallback === 'function') {
                  failCallback(error);
                }
              }
            });
          });
        },
        fail: (err) => {
          console.error('选择媒体失败:', err);
          wx.showToast({
            title: '选择媒体失败',
            icon: 'none'
          });
          if (typeof failCallback === 'function') {
            failCallback(err);
          }
        }
      });
    }
  },
  onLoad(options) {
    this.initRecord();
    this.getUserLocation();
    const feedbackType = options.feedbackType;
    console.log('feedbackType:', feedbackType);
    this.setData({
      'feedbackData.feedbackType': feedbackType
    })
    wx.getStorage({
      key: 'psCustomerCode',
      success: (res) => {
        this.setData({
          'feedbackData.psCustomerCode': res.data
        });
      },
    });
  },
  // 获取地址
  getUserLocation() {
    // 获取用户位置
    var that = this;
    var myAmapFun = new amapFile.AMapWX({
      key: 'd7d8fdf44090282bb11954ab2acc852a'
    });
    myAmapFun.getRegeo({
      success: function (data) {
        //成功回调
        console.log('成功回调', data)
        that.setData({
          'feedbackData.feedbackProvince': data[0].regeocodeData.addressComponent.province,
          'feedbackData.feedbackCity': data[0].regeocodeData.addressComponent.province,
          'feedbackData.feedbackRegion': data[0].regeocodeData.addressComponent.district,
          'feedbackData.feedbackAddress': data[0].name,
          'feedbackData.feedbackLongitude': data[0].longitude,
          'feedbackData.feedbackLatitude': data[0].latitude,
        })
      },
      fail: function (info) {
        //失败回调
        console.log(info)
      }
    })
  },
  getLocationDetails(latitude, longitude) {
    const that = this;
    // 高德地图 API Key
    const apiKey = 'f597a5ef5a47331716cd43a7a6566afb';
    const url = `https://restapi.amap.com/v3/geocode/regeo?location=${longitude},${latitude}&key=${apiKey}`;

    wx.request({
      url,
      success(res) {
        console.log(res.data)
        if (res.data.status === '1') {
          const result = res.data.regeocode.addressComponent;
          that.setData({
            location: {
              latitude,
              longitude,
              province: result.province,
              city: result.city,
              district: result.district
            }
          });
        } else {
          console.error('位置解析失败', res.data);
          wx.showToast({
            title: '解析位置失败',
            icon: 'none'
          });
        }
      },
      fail(err) {
        console.error('请求地理位置解析接口失败', err);
        wx.showToast({
          title: '请求失败',
          icon: 'none'
        });
      }
    });
  },
  // 启动录音并显示弹框
  recordStart: function () {
    this.data.recorderManager.start({
      duration: 60000, // 最长录音时间
      sampleRate: 16000,
      numberOfChannels: 1,
      encodeBitRate: 96000,
      format: 'mp3' // 可选：aac
    });
    const that = this;
    wx.showModal({
      title: '录音中...',
      content: '您可以暂停、继续或结束录音。',
      showCancel: true, // 是否显示取消按钮
      cancelText: '取消', // 取消按钮文字
      confirmText: '结束', // 确定按钮文字
      success: (res) => {
        if (res.confirm) {
          console.log('用户点击了结束录音');
          // 调用结束录音逻辑
          that.stopRecording();
        } else if (res.cancel) {
          console.log('用户取消了暂停录音');
          // 调用暂停录音逻辑
          that.stopRecording();
        }
      },
      fail(err) {
        console.error('模态框显示失败', err);
      }
    });
  },

  // 暂停录音
  pauseRecording: function () {
    this.data.recorderManager.pause();
  },

  // 继续录音
  resumeRecording: function () {
    this.data.recorderManager.resume();
  },

  // 停止录音
  stopRecording: function () {
    this.data.recorderManager.stop();
    // 上传录音文件
  }

})